package com.annotation.demo04;

import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;

// 提取注解信息
public class ExtractAnnotation {

    public static void main(String[] args) throws Exception {
        // 提取该类下面的方法注解
        String CLASS_NAME = "com.annotation.demo04.JavaStudy";
        // 反射
        Class test = Class.forName(CLASS_NAME);
        // 获取类下面的方法
        Method[] method = test.getMethods();
        // 判断 Class类上是否有 Description类型的注解
        boolean flag = test.isAnnotationPresent(Description.class);
        if (flag) {
            // 获取值
            Description des = (Description) test.getAnnotation(Description.class);
            System.out.println("描述："+des.value()); // 描述：java 是世界上最好的语言
        }

        // 获取Name 注释
        Set<Method> set = new HashSet<Method>();
        Set<String[]> title = new HashSet<String[]>();
        for (int i = 0; i < method.length; i++) {
            // 判断该方法上面是否有 Name类型的注解
            boolean otherFlag = method[i].isAnnotationPresent(Name.class);
            // 如果存在，把方法对象添加进集合中
            if(otherFlag) set.add(method[i]);
            // 判断该方法上面是否有 Title 类型注解
            boolean titleFlag = method[i].isAnnotationPresent(Title.class);
            if (titleFlag) {
                Title t = method[i].getAnnotation(Title.class);
                // 这里的value 是数组类型
                title.add(t.value());
            }
        }
        for (Method m:set) {
            // 获取注解
            Name name = m.getAnnotation(Name.class);
            System.out.println("创始人："+name.originate()); // 创始人：创始人：ymb  创始人：创始人：kerry
            System.out.println("社区："+name.community()); // 社区：联合社区 社区：龙步社区
        }
        for (String[] s:title) {
            for (String str:s) {
                System.out.println(str);// Java PHP Goland Python
            }
        }
    }
}
